package com.eliansun.crawler.pageparse.shanghai;

import com.eliansun.crawler.pageparse.AbstractPageProcess;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.selector.Selectable;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * user: lxc
 * data:2019- 07-02-16
 * 药房网商城 https://www.yaofangwang.com/
 */
public class Yaofangwang extends AbstractPageProcess {

    int count = 0;

    @Override
    public void process(Page page) {

        //列表界面
        if (page.getUrl().toString().indexOf("search") != -1) {
            List<Selectable> nodes = page.getHtml().xpath("//a[@class=photo]").nodes();
            if (nodes.size() == 0) {
                return;
            }
            //列表界面解析出对应的详情url，放到队列中
            for (Selectable node : nodes) {
                String s = node.links().toString();
                page.addTargetRequest(s);
            }

            //获取下一页放到队列中
            Object getTotalPage = page.getHtml().xpath("//*[@id=wrap]/div[1]/div[2]/div[4]/span/text()").replace(" /", "").replace(" ", "");
            if (getTotalPage != null) {
                //总页数
                Integer totalPage = Integer.parseInt(getTotalPage.toString());
                for (int i = 1; i < totalPage; i++) {
                    String url = page.getUrl().toString();
                    page.addTargetRequest(url.replace("page=1", "page=" + (i + 1)));
                }
            }
        } else {
            //详情界面
            Map<String, Object> resMap = new HashMap<>();
            // 商品名称
            resMap.put("goodsName", page.getHtml().xpath("//*[@id=wrap]/div[2]/div[2]/h1/strong/span/text()").get());

            //规格
            resMap.put("gg", page.getHtml().xpath("//dl[@class=clearfix]/dd[3]/text()").get().trim());

            //型号
            resMap.put("xh", page.getHtml().xpath("//dl[@class=clearfix]/dd[4]/text()").get());

            //生产企业
            resMap.put("sccj", page.getHtml().xpath("//dl[@class=clearfix]/dd[5]/text()").get());



            //价格
            String price = page.getHtml().xpath("//dd[@class=w1]/div/span/text()").get();
            resMap.put("price", price.trim());

            Map<String, Object> resultMap = new HashMap<>();
            resultMap.put("spec", resMap.get("gg"));
            resultMap.put("medicalDeviceNo", "");
            resultMap.put("productCompany", resMap.get("sccj"));
            resultMap.put("price", resMap.get("price"));
            resultMap.put("brand", "");
            resultMap.put("productName", resMap.get("goodsName"));
            resultMap.put("executiveStandard", "");
            resultMap.put("nationality", "");
            resultMap.put("store", super.cTerrace);
            resultMap.put("url", page.getUrl());
            resultMap.put("version", resMap.get("xh"));
            page.putField("result", resultMap);

            count++;
            System.out.println(count);
        }
    }

    Site site = Site.me()
            //设置编码
            .setCharset("utf-8")
            //设置抓取间隔时间
            .setSleepTime(1000 * 3)
            //设置超时时间，单位毫秒
            .setTimeOut(1000 * 3)
            //设置重试间隔时间
            .setRetrySleepTime(1000 * 3)
            //设置重试次数
            .setRetryTimes(3);

    @Override
    public Site getSite() {
        return site;
    }


    public static void main(String[] args) {
        Spider.create(new Yaofangwang())
                .addUrl("https://www.yaofangwang.com/search.html?keyword=@key@&price=1&page=1")
                //设置多个线程同时抓取数据
                .thread(1)
                .run();

    }
}
